from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn  # 解决中文显示问题


def generate_word_resume(resume_json, output_path="Python开发工程师简历.docx"):
    """
    用python-docx生成Word格式简历
    :param resume_json: 千问返回的简历字典
    :param output_path: Word输出路径
    :return: True（成功）/False（失败）
    """
    try:
        # 1. 创建空白Word文档（基础教学案例1的用法）
        doc = Document()

        # 2. 全局设置：中文宋体（基础教学案例3的用法，避免乱码）
        for paragraph in doc.paragraphs:
            for run in paragraph.runs:
                run.font.name = "宋体"
                run.element.rPr.rFonts.set(qn("w:eastAsia"), "宋体")

        # 3. 添加简历标题（居中、粗体、24号字，基础教学案例1的用法）
        title = doc.add_heading("个人简历", 0)
        title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
        for run in title.runs:
            run.font.bold = True
            run.font.size = Pt(24)

        # 4. 1. 基本信息（表格展示：2列5行，基础教学案例2的用法）
        doc.add_heading("一、基本信息", level=1)
        basic_info = resume_json["basic_info"]
        # 创建表格（5行2列）
        basic_table = doc.add_table(rows=5, cols=2)
        basic_table.style = "Table Grid"  # 表格带边框

        # 定义表格内容（左列：字段名，右列：字段值）
        basic_items = [
            ("姓名", basic_info["name"]),
            ("性别", basic_info["gender"]),
            ("联系电话", basic_info["phone"]),
            ("电子邮箱", basic_info["email"]),
            ("求职意向", basic_info["job_intention"])
        ]

        # 填充表格（左列粗体）
        for i, (label, value) in enumerate(basic_items):
            row_cells = basic_table.rows[i].cells
            # 左列：字段名（粗体）
            row_cells[0].text = label
            for run in row_cells[0].paragraphs[0].runs:
                run.font.bold = True
            # 右列：字段值
            row_cells[1].text = str(value)

        # 4. 2. 教育经历（段落+格式，基础教学案例1的用法）
        doc.add_heading("二、教育经历", level=1)
        for edu in resume_json["education"]:
            # 学校+学历+专业（粗体）
            para = doc.add_paragraph()
            para.add_run(f"学校：{edu['school']} | 学历：{edu['degree']} | 专业：{edu['major']}").bold = True
            # 时间+荣誉（常规字体）
            doc.add_paragraph(f"时间：{edu['time']}")
            doc.add_paragraph(f"荣誉：{edu['honors']}")
            doc.add_paragraph()  # 空行分隔

        # 4. 3. 工作经历（项目符号列表，基础教学案例1的扩展）
        doc.add_heading("三、工作经历", level=1)
        for work in resume_json["work_experience"]:
            # 公司+职位+时间（粗体）
            para = doc.add_paragraph()
            para.add_run(f"公司：{work['company']} | 职位：{work['position']} | 时间：{work['time']}").bold = True

            # 核心职责（二级项目符号）
            doc.add_paragraph("核心职责：", style="List Bullet")
            for resp in work["responsibilities"]:
                doc.add_paragraph(resp, style="List Bullet 2")

            # 工作成果（二级项目符号）
            doc.add_paragraph("工作成果：", style="List Bullet")
            for ach in work["achievements"]:
                doc.add_paragraph(ach, style="List Bullet 2")

            doc.add_paragraph()  # 空行分隔

        # 4. 4. 专业技能与自我评价（简化实现）
        # 专业技能（分点）
        doc.add_heading("四、专业技能", level=1)
        skills = resume_json["skills"]
        skill_labels = {
            "programming_language": "编程语言",
            "framework": "开发框架",
            "database": "数据库",
            "tools": "工具"
        }
        for key, label in skill_labels.items():
            doc.add_paragraph(f"{label}：{', '.join(skills[key])}")

        # 自我评价（项目符号）
        doc.add_heading("五、自我评价", level=1)
        for eval_text in resume_json["self_evaluation"]:
            doc.add_paragraph(eval_text, style="List Bullet")

        # 5. 保存Word文档（基础教学案例1的用法）
        doc.save(output_path)
        print(f"✅ Word简历生成成功，路径：{output_path}")
        return True

    except Exception as e:
        print(f"❌ Word生成失败：{e}")
        return False